// cf-354e
// 题意：定义幸运数就是只由0, 4, 7组成的正整数，现在有t(<=5000)组测试数据，
//       没组数据一个正整数n(<=10^18)，问是否可以由6个幸运数相加得到，
//       如果不可以输出-1, 否则输出一组可行的解。
//
// 题解：咋看很难，其实很简单，按位来做就行。每一位0, 4, 7的组合是有限的，
//       先预处理出每一位相加得到的数字以及进位，然后用f[i][j]表示从低
//       到高匹配到第i位，当前位进位是j，然后枚举上一位进位然后根据当前
//       要得到的数字来判断当前状态可不可达。至于输出只要把每次转移的路径，
//       以及选用的组合记录下来就行。
//
//
// run: $exec < input
// opt: 0
// flag: -g
#include <iostream>
#include <cstring>
#include <vector>
#include <map>

int constexpr a[] = {0, 4, 7};
std::vector<std::map<int, std::vector<int>>> v(10);

int constexpr maxn = 20;
int constexpr maxm = 6;
bool f[maxn][maxm];
int from[maxn][maxm];
std::vector<int> bit[maxn][maxm];
int num[maxn];
long long n;
int len = 0;

void print(int l)
{
	std::vector<long long> a(6);
	for (int i = l, t = 0; i; t = from[i--][t])
		for (int j = 0; j < 6; j++)
			a[j] = a[j] * 10 + bit[i][t][j];
	for (auto i : a) std::cout << i << ' ';
	std::cout << '\n';
}

int main()
{
	std::map<int, std::vector<int>> all;
	for (int i1 = 0; i1 < 3; i1++)
	for (int i2 = 0; i2 < 3; i2++)
		for (int i3 = 0; i3 < 3; i3++)
		for (int i4 = 0; i4 < 3; i4++)
			for (int i5 = 0; i5 < 3; i5++)
			for (int i6 = 0; i6 < 3; i6++) {
				int tmp = a[i1] + a[i2] + a[i3] + a[i4] + a[i5] + a[i6];
				std::vector<int> tv{a[i1], a[i2], a[i3], a[i4], a[i5], a[i6]};
				all[tmp] = tv;
			}
	for (auto i : all)
		v[i.first % 10][i.first / 10] = i.second;

#ifdef __DEBUG
	for (int i = 0; i < 10; i++) {
		std::cout << "i = " << i << " : ";
		for (auto j : v[i]) std::cout << j << ' ';
		std::cout << '\n';
	}
#endif

	int T; std::cin >> T;
	while (T--) {
		std::memset(f, 0, sizeof(f));
		std::cin >> n;
		auto tn = n;
		len = 0;
		for (; tn; tn /= 10) num[len++] = tn % 10;
		f[0][0] = true;
		for (int i = 0; i < len; i++)
			for (int j = 0; j < maxm; j++) {
				for (int t = 0; t < maxm; t++) {
					if (!f[i][t]) continue;
					int tj = j - (num[i] < t);
					int tmp = (num[i] - t + 10) % 10;
					for (auto k : v[tmp])
						if (k.first == tj) {
							f[i + 1][j] = true;
							from[i + 1][j] = t;
							bit[i + 1][j] = k.second;
						}
				}
			}

		if (f[len][0])
			print(len);
		else
			std::cout << "-1\n";
	}
}

